package dados.aluno;
import java.io.Serializable;

import negocio.aluno.Aluno;
import negocio.aluno.ListaAlunos;


public class RepositorioAlunosArray{

	private Aluno[] alunos;
	private int indice;
	private final static int tamanhoCache = 100;
	
	public RepositorioAlunosArray() {
		indice = 0;
		alunos = new Aluno[tamanhoCache];
	}
	public RepositorioAlunosArray(ListaAlunos listaAlunos) throws AlunosSemCapacidadeArmazenamentoException{
		indice = 0;
		alunos = new Aluno[tamanhoCache];
		while (listaAlunos.hasNext()) {
			Aluno aluno = listaAlunos.next();
			inserir(aluno);
		}
	}
	
	public Aluno[] getAlunos() {
		return alunos;
	}

	public int getIndice() {
		return indice;
	}

	private int procurarIndice(String nome) throws AlunoNaoExistenteException{
		int indice=0;
		boolean achou = false;
		for (Aluno aluno : alunos) {
			if (aluno != null && aluno.getNome().equals(nome)) {
				achou = true;
				break;
			}
			else {
				indice++;
			}
		}
		if (achou) {
			return indice;
		} 
		else {
			throw new AlunoNaoExistenteException(nome);
		}
	}
	
	public void atualizar(Aluno aluno) throws AlunoNaoExistenteException{
		int i = procurarIndice(aluno.getNome());
		alunos[i] = aluno;
	}
	
	public void inserir(Aluno aluno) throws AlunosSemCapacidadeArmazenamentoException{
		if (indice < tamanhoCache) {
			alunos[indice] = aluno;
			indice++;
		} else {
			throw new AlunosSemCapacidadeArmazenamentoException();
		}	
	}
	public void inserirLista(Aluno aluno){
		if (indice < tamanhoCache) {
			alunos[indice] = aluno;
			indice++;
		}	
	}
	
	public Aluno procurar(String nome) throws AlunoNaoExistenteException{
		Aluno a;
		int i = this.procurarIndice(nome);
		a = alunos[i];
		return a;
	}

	public void descadastrar(Aluno aluno) throws AlunoNaoExistenteException{
		int i = procurarIndice(aluno.getNome());
		alunos[i] = alunos[indice - 1];
		alunos[indice - 1] = null;
		indice--;
	}
	
	public boolean existe(String nome){
		boolean resposta;
		
		try {
			procurarIndice(nome);
			resposta = true;
		} catch (AlunoNaoExistenteException e) {
			resposta = false;
		}
		return resposta;
	}
}